<?php

namespace Transaccion\Model\Dao;

use Zend\Db\Adapter\Adapter;
use Zend\Db\Sql\Sql;
use Transaccion\Model\Dao\GenericDAO;

class SemestreDAO extends GenericDAO {

    protected $dbAdapter;

    /**
     * Nombre de la Tabla
     * @var type String
     */
    protected $tabla = 'semestre';
    protected $tabla1= 'datosacademicos';
    private static $semestreDao;

    /**
     * Configura Adaptador de Base de Datos
     * 
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    private function __construct(Adapter $adapter) {
        $this->dbAdapter = $adapter;
    }

    /**
     * 
     * @param type $adapter
     * @return instancia de CiudadDao
     * Patron singleton
     */
    public static function getInstance($adapter) {
        if (self::$semestreDao == null) {
            self::$semestreDao = new SemestreDAO($adapter);
        }
        return self::$semestreDao;
    }

    public function getRegistro($id) {
        return $this->getRegistroGeneral($id, $this->tabla, $this->dbAdapter);
    }

    /**
     * Consulta que retorna los registros de la tabla semestre
     * que coincida con el id de Datos Academicos dado por param
     * @param type String $idDatosAcademicos: id de Datos Academicos
     * @return type resultadosBaseDeDatos
     * SQL SELECT "semestre".* FROM "semestre" WHERE id = '@param'
     */
    public function getSemestreSegunIdDatosAcademicos($id) {
        $sql = new Sql($dbAdapter);
        $select = $sql->select();
        $select->from($tabla);
        $select->where('id_datos_academicos = ' . $id);
        $selectString = $sql->getSqlStringForSqlObject($select);
        $adapter = $dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        print_r($selectString);
        return $results;
    }

    /**
     * Consulta que retorna los registros de la tabla semestre
     * que coincida con el id de Organizacion Seccion dado por param
     * @param type String $idOrganizacionSeccion: id de Organizacion Sección
     * @return type resultadosBaseDeDatos
     * SQL SELECT "semestre".* FROM "semestre" WHERE id = '@param'
     */
    public function getSemestreSegunIdOrganizacionSeccion($id) {
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select();
        $select->from($this->tabla);
        $select->where(array('id_organizacion_seccion = ' . $id));
        $selectString = $sql->getSqlStringForSqlObject($select);
        $adapter = $this->dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        return $results;
    }

    /**
     * Consulta que retorna los registros de la tabla semestre
     * que coincida con el id de Condicion Materia dado por param
     * @param type String $idCOndicionMateria: id de la Condicion Materia
     * @return type resultadosBaseDeDatos
     * SQL SELECT "semestre".* FROM "semestre" WHERE id = '@param'
     */
    public function getSemestreSegunIdCondicionMateria($id) {
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select();
        $select->from($this->tabla);
        $select->where(array('id_condicion_materia = ' . $idCondicionMateria));
        $selectString = $sql->getSqlStringForSqlObject($select);
        $adapter = $this->dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        return $results;
    }

    //------------ ELIMINAR REGISTROS DE SEMESTRE DE ACUERDO AL ID ------

    public function eliminarSemestreSegunId($id) {       
        $sql = new Sql($this->dbAdapter);
        $delete = $sql->delete($this->tabla)->where('id ='.$id);     
        $statement = $sql->prepareStatementForSqlObject($delete);       
        if ($statement->execute()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @param type $data
     * @return type
     */
    public function createRegistro($data) {
        $columns = array();
        $values = array();
        foreach ($data as $column => $value) {
            $columns[] = $column;
            $values[$column] = (string) $value;
        }
        $sql = new Sql($this->dbAdapter);
        $insert = $sql->insert();
        $insert->into($this->tabla);
        $insert->columns($columns);
        $insert->values($values);
        $statement = $sql->prepareStatementForSqlObject($insert);
        if ($statement->execute()) {
            return true;
        } else {
            return false;
        }
    }

    
}
